<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let obj1 = {age: 8, name: 'Tom', money: 999};

        // es5版本的代理
        Object.defineProperty(obj1, 'money', {
            configurable: true, // 能否被删除
            writable: true // 能否被修改
            // 以上都是数据描述符，表示数据能否被删除、修改，以及默认值等
        })

        let obj2 = {age: 18, name: 'Tina', money: 0};
        let v = obj2.money
        Object.defineProperty(obj2, 'money', {
            get(){
                // 这个函数会在获取数据时自动执行，代替obj.key的操作
                console.log('数据被访问！');
                return v
            },
            set(val) {
                // 这个函数会在等号赋值时运行，代替原始操作
                console.log('数据被修改！');
                v = val+5;// 每次修改money都偷偷多加5块钱
            }
        })

    </script>
</body>
</html>